#include<bits/stdc++.h>
using namespace std;

#define N 100000
int st[N][2],p[N],chafen[1000002];
int T,n,m,L,V,d,v,a,x,y;

void test(){
    scanf("%d%d%d%d",&n,&m,&L,&V);
    for(int i=0;i<n;i++){
        scanf("%d%d%d",&d,&v,&a);
        if(a==0){
            if(v<=V){
                i--;
                n--;
            }
            else{
                st[i][0]=d;
                st[i][1]=L;
            }
        }
        else if(a>0){
            if(v<=V){
                x=V*V-v*v;
                y=a*2;
                if(x%y==0)x=x/y+1;
                else x=x/y+1;
                if(d+x>L){
                    i--;
                    n--;
                    continue;
                }
                st[i][0]=d+x;
                st[i][1]=L;
            }
            else{
                st[i][0]=d;
                st[i][1]=L;
            }
        }
        else{
            if(v<=V){
                i--;
                n--;
            }
            else{
                x=V*V-v*v;
                y=a*2;
                if(x%y==0)x=x/y-1;
                else x=x/y;
                st[i][0]=d;
                st[i][1]=min(d+x,L);
            }
        }
    }
    for(int i=0;i<m;i++){
        cin>>p[i];
    }
    for(int i=0;i<n;i++){
        y=st[i][1];
        int j;
        for(j=0;j<m-1&&p[j]<y;j++);
        if(m==1){
            if(y<p[j]||st[i][0]>p[j]){
                st[i][0]=st[n-1][0];
                st[i][1]=st[n-1][1];
                n--;
                i--;
            }
            continue;
        }
        if(j==0){
            if(y<p[j]||st[i][0]>p[j]&&y<p[j+1]){
                st[i][0]=st[n-1][0];
                st[i][1]=st[n-1][1];
                n--;
                i--;
            }
            continue;
        }
        if(j==m-1){
            if(st[i][0]>p[j]||y<p[j]&&st[i][0]>p[j-1]){
                st[i][0]=st[n-1][0];
                st[i][1]=st[n-1][1];
                n--;
                i--;
            }
            continue;
        }
        if(st[i][0]>p[j-1]&&y<p[j]){
            st[i][0]=st[n-1][0];
            st[i][1]=st[n-1][1];
            n--;
            i--;
            continue;
        }
    }
    cout<<n<<" ";

    int ans=0;
    while(n>0&&ans<m){
        memset(chafen,0,L);
        ans++;
        for(int i=0;i<n;i++){
            chafen[st[i][0]]++;
            chafen[st[i][0]+1]--;
        }
        for(int i=1;i<=L;i++)chafen[i]+=chafen[i-1];
        int mi=p[0];
        for(int i=1;i<m;i++)
            if(chafen[p[i]]>=chafen[mi])
                mi=p[i];
        for(int i=0;i<n;i++){
            if(st[i][0]<=mi&&st[i][1]>=mi){
                st[i][0]=st[n-1][0];
                st[i][1]=st[n-1][1];
                n--;
                i--;
            }
        }
    }
    ans=m-ans;
    cout<<ans<<endl;
}

int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);
    for(int i=0;i<T;i++)test();
    return 0;
}
